import BattleUnit from "./BattleUnit"
import BattleUnitBase from "./core/BattleUnitBase"
import SkillBase from "./core/SkillBase"

/**
 * buff
 */
export interface I_Effect {
    effType: E_EffectType,
    /**buff叠加类型（替换、叠加） */
    effFlag: E_EffectFlag,
    effNum: number,
    curRound: number,
    sustain_round: number
}

/**buff类型 */
export enum E_EffectType {
    /**属性加成 */
    ATTR,
    /**灼烧 */
    FIRE,
}

/**buff叠加类型 */
export enum E_EffectFlag {
    ADD,
    REPLACE,
}

/**buff触发时机 */
export enum E_EffectTiming {
    Normal,
    CombatStart,//战斗开始
    RoundBegin,//回合开始
    Attack,//攻击时
    Hit,//受击时
    RoundEnd,//回合结束
}

/**战斗单位属性 */
export enum E_BattleUnitAttr {
    /**速度 */
    SPEED = 1001,

    /**生命 */
    HP,

    /**基础攻击力 */
    ATK,

    /**防御值 */
    DEFENSE,

    /**百分比吸血 */
    SUCK_BLOOD,

    /**反击 */
    COUNTERATTACK_RATE,

    /**连击 */
    DOUBLE_HIT_RATE,

    /**闪避几率 */
    DODGE_RATE,

    /**暴击几率 小数表示 */
    CRITICAL_RATE,

    /**击晕概率 */
    STUN_RATE,

    /**忽视吸血 */
    IGNORE_SUCK_BLOOD,

    /**忽视反击 */
    IGNORE_CONUTERATTACT_RATE,

    /**忽视连击 */
    IGNORE_DOUBLE_HIT_RATE,

    /**忽视闪避 */
    IGNORE_DODGE_RATE,

    /**忽视暴击 */
    IGNORE_CRITICAL_RATE,

    /**忽视击晕 */
    IGNORE_STUN_RATE,

    /**暴虐 提高暴击伤害*/
    CRITICAL_HURT,

    /**仁爱 减少对方暴击伤害*/
    IGNORE_CRITICAL_HURT,

    /**泥泞 减少对方速度*/
    MUDDY,

    /**禁疗 减少对方治疗效果*/
    RECOVER_FORBIDDEN,

    /**回复 第五回合回复生命*/
    RECOVER,

    /**欺凌 对方低于半血增伤*/
    BULLYING,

    /**掠财 增加挑战胜利金币*/
    PLUNDER,

    /**伤害减免 */
    HURT_REDUCE_RATE,

    /**忽略防御 */
    IGNORE_DEFENSE_RATE,

    /**攻击力加成 */
    ATK_ADD_RATE,

    /**伤害加成 */
    HURT_ADD_RATE,

    /**护盾 */
    SHIELD,
}

/**行动类型 */
export enum E_SubActionType {
    NORMAL = 1,

    /**连击 */
    DOUBLE_HIT = 2,

    /**反击 */
    COUNTERATTACK = 3,
}

export interface I_SubActionMsg {

    subActionType: E_SubActionType

    /**行动 */
    action: BattleUnit

    /**一个目标 */
    target: BattleUnit

    isMiss?: Boolean

    hurtNum?: number

    /**暴击 */
    critical?: boolean

    /**吸血 */
    suckBlood?: number

    /** 击晕 */
    stun?: boolean

    targetDie?: boolean

    playSkill?: { skillID: number, eff: I_Effect[] }[]

    skillData?: SkillBase;

    attackDic: number
}

/**触发一次buff的结果 */
export interface I_EffectAction {
    timing: E_EffectTiming,
    buffId: number,
    cast?: BattleUnit,//触发目标
    skill?: SkillBase,//触发技能
    val?: number,//触发值
    status?: number,//触发状态
}

export interface I_ActionMsg {

    /**行动unit */
    action: BattleUnit

    /**目标units */
    targets: BattleUnit[]

    subActions: I_SubActionMsg[]
}